package org.phantom.demo.server.socket;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.ServerSocket;
import java.net.Socket;

import javax.annotation.PostConstruct;

import org.springframework.stereotype.Service;

@Service
public class SocketServer {

	public static final int SERVER_PORT = 9527;

	@PostConstruct
	public void init() {
		try {
			ServerSocket serverSocket = new ServerSocket(SERVER_PORT);
			while (true) {
				// 一旦有堵塞, 则表示服务器与客户端获得了连接
				Socket client = serverSocket.accept();
				// 处理这次连接
				new Responser(client);
			}
		} catch (Exception e) {
			System.out.println("服务器异常: " + e.getMessage());
		}
	}
}

class Responser implements Runnable {  
    private Socket socket;    
    public Responser(Socket client) {    
        socket = client;    
        new Thread(this).start();    
    }    

    public void run() {    
        try {    
            // 读取客户端数据    
            DataInputStream input = new DataInputStream(socket.getInputStream());  
            String clientInputStr = input.readUTF();//这里要注意和客户端输出流的写方法对应,否则会抛 EOFException  
            // 处理客户端数据    
            System.out.println("客户端发过来的内容:" + clientInputStr);    

            // 向客户端回复信息    
            DataOutputStream out = new DataOutputStream(socket.getOutputStream());    
            out.writeUTF("hello:"+clientInputStr);    
              
            out.close();    
            input.close();    
        } catch (Exception e) {    
            System.out.println("服务器 run 异常: " + e.getMessage());    
        } finally {    
            if (socket != null) {    
                try {    
                    socket.close();    
                } catch (Exception e) {    
                    socket = null;    
                    System.out.println("服务端 finally 异常:" + e.getMessage());    
                }    
            }    
        }   
    }    
}
